今天要介紹給各位客倌的是立即函式 ( Immediately Invoked Function Expression ),是指一個立刻執行的函式,常被使用在只執行一次的程式碼上,例如說初始化的動作,而且因為它自成一個區域,所以可以避免與全域的變數污染。
所以上述了這麼多,總結來說,立即函式有兩個優點
全域變數減少: 將變數暴露在全域中是非常危險的,因為很有可能會被其他地方的程式修改到,導致相同的全域變數會被覆蓋掉。
全域變數區域化: JavaScript 在尋找變數時,會優先找區域裡的變數,若找不到才會往上層獲全域變數找,所以把全域變數當成參數傳給立即函式,能夠在效能上獲得些許提升。
以下,就讓我們來實作看看吧!
// function 內的區域變數
var a = 1;
(function() {
var b = true;
console.log(a); // 1;
})();
console.log(b); // b is not defined;
// 將全域變數當作參數傳遞
(function(window, document) {
window.onerror = function() {
console.log("error");
};
document.querySelector("body").addEventListener("click", function() {
console.log("click");
});
})(window, document);
呼,接下來就要進到語言特性的部分了,對於閉包總是有一種霧裡看花的感覺,希望能藉由後面的文章,來對閉包有個更深刻的了解,客倌,我們下回見!
參考資料: Tommy - 深入 JavaScript 核心課程